[アップデート] EKSがマネジメントコンソールおよびCLIでのワーカーノードの作成・管理をサポートしました
みなさん、こんにちは! AWS事業本部の青柳@福岡オフィスです。
Amazon EKS において、ワーカーノードの作成・管理がマネジメントコンソールやAWS CLIから行えるようになりました。
Amazon EKS adds support for provisioning and managing Kubernetes worker nodes Extending the EKS API: Managed Node Groups | Containers
何が変わったのか?
これまで
今まで、EKSサービスに関して、マネジメントコンソールやAWS CLIで作成・管理できるのは「コントロールプレーン」のみでした。
ワーカーノードを作成する手順として公式に用意されていたのは、AWSから提供されている「ワーカーノード作成用CloudFormationテンプレート」を使用してEC2 Auto Scalingの「Launch Configulation」や「Auto Scaling Group」を作成し、起動したEC2インスタンスをワーカーノードとしてEKSクラスターに組み込むという方法でした。
この手順ですと、コントロールプレーンとワーカーノードを一連の流れで作成することができませんし、また、作成したワーカーノードをマネジメントコンソールの「EKSクラスター」から参照する (管理する) こともできませんでした。
一方、サードパーティが開発・提供している(※) eksctl
コマンドラインツールを使用することで、コントロールプレーンとワーカーノードを一連の流れで作成することは可能でした。
(※ eksctlはサードパーティ製ツールではありますが、AWSも開発に参加しており、AWSドキュメントにも使用方法が掲載されています)
ただし、eksctlで作成したワーカーノードは、マネジメントコンソールやAWS CLIで作成した場合と同様に、マネジメントコンソールの「EKSクラスター」から管理することができませんでした。
今回のアップデート後
今回のアップデートによって、以下のようなことが行えるようになりました。
- マネジメントコンソールの「EKSクラスター」画面から、ワーカーノードを作成できるようになった。
- 作成したワーカーノードは「EKSクラスター」画面に表示され、管理が行えるようになった。
- AWS CLIでも
aws eks
のサブコマンドとしてcreate-nodegroup
やdescribe-nodegroup
、update-nodegroup-config
などが新たに追加され、ワーカーノードの作成や管理が行えるようになった。
これによって、EKSクラスターの構成要素としてのワーカーノードが、より直感的に扱えるようになりました。
試してみた
マネジメントコンソール使用
まず、マネジメントコンソールを使用してワーカーノードを作成してみます。
前提として、VPC環境やEKSコントロールプレーンは作成済みとします。 また、EKSサービスが依存する各種リソースについても、予め作成しておく必要があります。
- EC2キーペア
- EKSサービスIAMロール
- EKSノードIAMロール
- コントロールプレーンセキュリティグループ
- ワーカーノードセキュリティグループ
これらのリソースの作成方法については、以下のページなどを参考にしてください。
Amazon EKS サービス IAM ロール - Amazon EKS Amazon EKS ワーカーノード IAM ロール - Amazon EKS クラスターセキュリティグループの考慮事項 - Amazon EKS
では、ワーカーノードを作成します。
作成したコントロールプレーンの画面に「Add node group」ボタンがありますので、クリックします。 (「ノードグループ」は、「ワーカーノード」の集まりの単位です)
必須項目として、以下の項目を入力します。
- ノードグループの名前
- ノードIAMロール (前述したように予め作成しておく必要あり)
また、「Allow remote access to nodes」にチェックを入れると、作成したワーカーノードにSSH接続するための情報を指定することができます。
- EC2キーペア
- ワーカーノードへ適用するセキュリティグループ
セキュリティグループは、「All」を選択すると、任意のアドレス (0.0.0.0/0) からのTCP/22アクセスを許可するセキュリティグループがデフォルトで作成されます。 「Selected security groups」を選択すると、予め作成したセキュリティグループを適用することができます。
「All」を選択した場合でも、後からセキュリティグループのルールを追加・変更することができますので、ここでは「All」を選択することにします。
「Next」ボタンをクリックして次のステップへ進みます。
EC2インスタンスの諸元を入力します。
- AMIタイプ
- インスタンスタイプ
- ディスクサイズ
「AMIタイプ」は、現時点では「Amazon Linux 2」「Amazon Linux 2 GPU Enabled」のみが選択できます。 選択したタイプによって、EKSクラスターのリージョンやKubernetesバージョンに応じた適切な EKS最適化AMI が選択されます。
「Next」ボタンをクリックして次のステップへ進みます。
Auto Scalingグループの諸元を入力します。
- 最小ノード数
- 最大ノード数
- 希望するノード数 (初期ノード数)
「Next」ボタンをクリックして最後のステップへ進みます。
設定した内容に間違いが無いことを確認して、「作成」をクリックします。
コントロールプレーンの画面に戻ると、ノードグループが作成されています。 (作成完了までしばらく待つ必要があります)
ノードグループ名をクリックすると、ノードグループの情報を参照することができます。
「Edit」ボタンをクリックすると、ノードグループの設定を変更することができます。
現時点で、変更が可能なのは「ノード数 (最小、最大、希望)」および「リソースタグ」「Kubernetesラベル」のみとなっています。
なお、ノードグループは、内部では「Launch Template」と「Auto Scaling Group」によって構成されています。 (以前のCloudFormationを使用した構築手順では「Launch Configulation」でしたので、違いに注意してください) これらのリソースがどのような設定になっているのか、気になる方は確認してみてください。
最後に、作成したノードグループを kubectl
コマンドを使用して確認します。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-192-168-110-195.ap-northeast-1.compute.internal Ready <none> 2d17h v1.14.7-eks-1861c5 ip-192-168-186-193.ap-northeast-1.compute.internal Ready <none> 2d17h v1.14.7-eks-1861c5
2つのワーカーノードが作成されていることが確認できました。
AWS CLIを使用
今度は、AWS CLIを使用してワーカーノード (ノードグループ) を作成してみます。
ノードグループを作成するコマンド aws eks create-nodegroup
の使い方・オプションは以下リンク先を参照してください。
https://docs.aws.amazon.com/cli/latest/reference/eks/create-nodegroup.html
マネジメントコンソールで作成した時と同様の構成で作成するには、以下のようにオプションを指定します。
aws eks create-nodegroup \ --cluster-name example-cluster \ --nodegroup-name nodegroup-2 \ --scaling-config minSize=2,maxSize=2,desiredSize=2 \ --disk-size 20 \ --subnets subnet-XXXXXXXXXXXXXXXXX subnet-XXXXXXXXXXXXXXXXX subnet-XXXXXXXXXXXXXXXXX subnet-XXXXXXXXXXXXXXXXX \ --instance-types t3.medium \ --ami-type AL2_x86_64 \ --remote-access ec2SshKey=eks-workernodes-key \ --node-role arn:aws:iam::123456789012:role/NodeInstanceRole
AWS CLIで作成したノードグループは、マネジメントコンソールの画面でも確認することができます。
ノードグループに関するコマンドは他に以下のようなものが用意されています。
list-nodegroups
describe-nodegroup
delete-nodegroup
update-nodegroup-config
update-nodegroup-version
最初の4つは、実際に使ってみて動きを確認してみるとよいでしょう。
最後の update-nodegroup-version
コマンドは、ノードグループのEKS-Optimazed AMIのバージョンをアップデートする際に使用します。
(ノードグループのアップデートに関しては、別の機会に試したいと思います)
「eksctl」との関係性
今回のアップデートは、マネジメントコンソールやAWS CLIのみのアップデートではなく、EKSのAPIレベルで実装されたものになっています。 https://docs.aws.amazon.com/eks/latest/APIReference/Welcome.html https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html
これまでEKSの環境構築・管理に使える高機能なツールとして eksctl
コマンドが提供されていましたが、eksctlは主にCloudFormationを用いてリソースを作成する手法で実装されており (AWS APIやKubernetes APIも利用されています)、今回のアップデートにeksctlが取り込まれたという訳ではなさそうです。
ただし、eksctl側でも今回のアップデートに対応しており、eksctl create cluster
コマンドや eksctl create nodegroup
コマンドの実行時に --managed
オプションを付与することにより、作成されたノードグループがマネージメントコンソール上で表示・管理できるようになります。
(逆に、--managed
を付けなければマネージメントコンソール上で表示・管理ができませんので注意してください)
実行例:
eksctl create cluster \ --name eksctl-cluster \ --version 1.14 \ --nodegroup-name eksctl-nodegroup \ --node-type t3.large \ --nodes 2 \ --nodes-min 2 \ --nodes-max 2 \ --managed
おわりに
つい先月、「eksctl」コマンドを使用したEKS環境構築についてご紹介したばかりということもあり、今回のアップデートには正直驚きました。
eksctl
コマンドは非常に高機能であり使い方も分かり易いツールですので、現時点ではマネージメントコンソールやAWS CLIを使ってEKS環境を構築するよりもeksctlを使った方が便利な場面も多いかもしれません。
しかし、今回のアップデートがAWS APIレベルで実装されたものであることから、EKSを使う上では押さえておくべきものだと思います。 今後の機能拡充にも期待したいところです。